「AI 不會取代自動化測試工程師(SDET);但懂用 AI 的 SDET,將會全面取代還在純手動寫 3000 行 Page Object 的工程師。」
大家好,我是 Jane,一個每天在第一線處理跨平台(Web & App)自動化測試、跟 CI/CD Pipeline 與前沿技術(AI in Testing)奮戰的自動化測試工程師(SDET)。
在上集 Day 28 中,我們制定了舊測試框架重構的 5 階段藍圖,學會了如何優雅地清除技術債。
來到 2026 年,整個軟體工程領域變化最快的,莫過於生成式 AI(LLM)與 AI Agent 在自動化測試中的落地。
許多剛接觸 AI 工具的 QA 常會有兩個極端的誤解:
身為第一線把關品質的 SDET,我們到底該如何理性、高效地把 AI 工具整合進 Python/pytest 自動化測試體系中?
今天這篇文章,我們就來好好剖析:AI 可以在自動化測試的哪 4 個環節發揮 10x 效能?以及我們該如何防範 AI 帶來的『幻覺陷阱』!
┌─────────────────────────┐
│ AI 輔助測試 4 大場景 │
└────────────┬────────────┘
│
┌───────────────────────────┼───────────────────────────┐
▼ ▼ ▼
1. API 契約與 Schema 產生 2. Page / Component 生成 3. 測試資料動態生成 (Data)
4. 失敗 Log 根因診斷 (RCA)
給予一段 OpenAPI / Swagger 規格文件或是 HTTP Response JSON,讓 AI 在 5 秒內精準生成 Pydantic Schema(Day 20)與 pytest 測試範本。
貼上前端的 DOM 結構或是 React 元件原始碼,讓 AI 自動提取語意化的 data-testid 或 get_by_role 定位器,並組裝成物件類別。
利用 LLM 針對業務邏輯生成極端邊界值(如:各國特殊字元姓名、跨時區日期格式、SQL Injection/XSS 測試字串),充實我們的 Data Factory(Day 17)。
在 CI Pipeline 失敗時,將控制台輸出、Playwright Trace 錯誤與 API Response 餵給 AI,讓 AI 快速摘要出「這是 DOM 超時、500 伺服器錯誤還是邏輯斷言失敗」。
我們來寫一個極度實用的腳本:當我們輸入一個 API Response 的 JSON 時,利用 Python 腳本呼叫 LLM,自動生成對應的 Pydantic Schema 與 pytest 測試程式碼!
scripts/ai_test_generator.py)Python
# scripts/ai_test_generator.py
import json
import os
from openai import OpenAI
# 初始化 OpenAI Client
client = OpenAI(api_key=os.getenv("OPENAI_API_KEY"))
PROMPT_TEMPLATE = """
你是一個資深的 Python SDET 工程師。請根據以下提供 API Response JSON,
為我生成符合的最佳實踐代碼:
1. 使用 Pydantic (v2) 定義嚴謹的 Response Schema (包含欄位型態與 Optional 處理)。
2. 使用 pytest + requests 撰寫一個完整測試函式。
3. 斷言必須包含 Schema 驗證與狀態碼 200 檢查。
API Response JSON:
{json_data}
請僅回傳乾淨的 Python 程式碼,不要包含額外的說明文字。
"""
def generate_pytest_code(json_str: str) -> str:
"""呼叫 LLM 根據 JSON 自動生成 pytest 程式碼"""
prompt = PROMPT_TEMPLATE.format(json_data=json_str)
response = client.chat.completions.create(
model="gpt-4o", # 或使用當前最新的 LLM 模型
messages=[{"role": "user", "content": prompt}],
temperature=0.2 # 低隨機性,確保程式碼結構穩定
)
return response.choices[0].message.content
if __name__ == "__main__":
sample_json = json.dumps({
"status": "success",
"data": {
"user_id": "USR_9981",
"email": "jane_sdet@example.com",
"is_vip": True,
"orders_count": 5
}
})
generated_code = generate_pytest_code(sample_json)
print("=== AI 自動生成的 pytest 程式碼 ===")
print(generated_code)
執行上述腳本後,AI 會產出以下乾淨且可執行的程式碼:
Python
# 由 AI 自動生成的測試代碼
import pytest
import requests
from pydantic import BaseModel, EmailStr, Field
# 1. AI 自動生成的 Pydantic Schema
class UserDataSchema(BaseModel):
user_id: str
email: EmailStr
is_vip: bool
orders_count: int = Field(ge=0)
class ApiResponseSchema(BaseModel):
status: str
data: UserDataSchema
# 2. AI 自動生成的 pytest 測試案例
def test_user_api_schema_generated_by_ai(api_base_url, auth_headers):
response = requests.get(f"{api_base_url}/api/v1/user/profile", headers=auth_headers)
assert response.status_code == 200
# 執行 Pydantic Schema 結構與型態校驗
validated_data = ApiResponseSchema(**response.json())
assert validated_data.status == "success"
assert validated_data.data.is_vip is True
雖然 AI 能將樣板程式碼(Boilerplate Code)的撰寫速度提升 5 倍,但 SDET 必須擔任最後的 Human-in-the-loop(人工審核) 防線:
assert True 或 assert response.status_code != 500 這類看似有寫、實則無法捕捉商業 Bug 的無效斷言。#submit-btn-v2)。永遠要在真實瀏覽器中驗證 Locators 的存在!
conftest.py Fixture 的動態 Teardown 架構(Day 17)。恭喜大家完成了前 29 天的精彩旅程!
明天,我們將來到整個 30 天鐵人賽系列文章的最高潮與完結篇:
《 Day 30|測試自動化的終極目標:建構可信任的品質平台與 SDET 的職涯進化 》。
明天 Day 30,我們將為整個 30 天的自動化測試體系劃上完美的句點,並一起展望跨平台自動化測試工程師(SDET)的未來!